package com.blog.cmrpersonalblog.service;

import com.blog.cmrpersonalblog.dto.file.respnose.FileUploadResponse;
import com.blog.cmrpersonalblog.enums.FileUploadType;
import org.springframework.web.multipart.MultipartFile;

/**
 * 统一文件上传服务接口
 */
public interface UnifiedFileUploadService {
    
    /**
     * 上传文件
     * 
     * @param file 要上传的文件
     * @param uploadType 上传类型
     * @param userId 用户ID（可选）
     * @param extraParams 额外参数（可选）
     * @return 上传结果
     */
    FileUploadResponse uploadFile(MultipartFile file, FileUploadType uploadType, Long userId, Object... extraParams);
    
    /**
     * 上传文件（使用类型代码）
     * 
     * @param file 要上传的文件
     * @param typeCode 上传类型代码
     * @param userId 用户ID（可选）
     * @param extraParams 额外参数（可选）
     * @return 上传结果
     */
    FileUploadResponse uploadFile(MultipartFile file, String typeCode, Long userId, Object... extraParams);
    
    /**
     * 删除文件
     * 
     * @param relativePath 文件相对路径
     * @param uploadType 上传类型
     * @return 是否删除成功
     */
    boolean deleteFile(String relativePath, FileUploadType uploadType);
    
    /**
     * 删除文件（使用类型代码）
     * 
     * @param relativePath 文件相对路径
     * @param typeCode 上传类型代码
     * @return 是否删除成功
     */
    boolean deleteFile(String relativePath, String typeCode);
    
    /**
     * 验证文件
     * 
     * @param file 要验证的文件
     * @param uploadType 上传类型
     * @return 验证结果
     */
    boolean validateFile(MultipartFile file, FileUploadType uploadType);
    
    /**
     * 验证文件（使用类型代码）
     * 
     * @param file 要验证的文件
     * @param typeCode 上传类型代码
     * @return 验证结果
     */
    boolean validateFile(MultipartFile file, String typeCode);
}
